package file

import (
	"context"
	"github.com/gogf/gf/v2/frame/g"
)

type Download struct {
	paths []string
}

func (receiver *Download) GetDownloadPath(ctx context.Context) string {
	path, _ := g.Cfg().Get(ctx, "beesoft.download.path")

	return path.String()
}
func (receiver *Download) SetCleanPath(path string) *Download {
	receiver.paths = append(receiver.paths, path)

	return receiver
}

// func (receiver *Download) Down(resource string) ([]byte, error) {
// 	var response *ghttp.Response
// 	var err error
//
// 	client := ghttp.Request{}
//
// 	for i := 0; i < 3; i++ {
// 		response, err = client.(resource)
// 		if err == nil && response.Status == http.StatusOK {
// 			break
// 		}
// 	}
//
// 	if err != nil {
// 		return nil, errors.New("request url error, err=" + err.Error())
// 	}
// 	if response.Status != http.StatusOK {
// 		return nil, errors.New(fmt.Sprintf("request url error, http_code=%d", response.Status))
// 	}
//
// 	return response.Buffer(), err
// }
// func (receiver *Download) DownloadFile(ctx context.Context, resource, path string) error {
// 	uri, err := url.ParseRequestURI(resource)
// 	if err != nil {
// 		return fmt.Errorf("parse url failed, err=%s", err.Error())
// 	}
//
// 	scheme := gstr.ToLower(uri.Scheme)
// 	if scheme == "oss" {
// 		ossConfig, _ := g.Cfg().Get(ctx, "aliyun.oss")
// 		return api.Aliyun.Oss.DownloadFile(ctx, ossConfig.MapStrStr(), path)
// 	}
//
// 	body, err := receiver.Down(resource)
// 	if err != nil {
// 		return err
// 	}
//
// 	f, err := gfile.Create(path)
// 	if err != nil {
// 		return fmt.Errorf("create file error: %s", path)
// 	}
//
// 	_, err = f.Write(body)
// 	if err != nil {
// 		return fmt.Errorf("write file error: %s", path)
// 	}
//
// 	_ = f.Close()
//
// 	return nil
// }
// func (receiver *Download) DownloadContent(ctx context.Context, resource string) (string, error) {
// 	uri, err := url.ParseRequestURI(resource)
// 	if err != nil {
// 		return "", fmt.Errorf("parse url failed, err=%s", err.Error())
// 	}
//
// 	scheme := gstr.ToLower(uri.Scheme)
// 	if scheme == "oss" {
// 		ossConfig, _ := g.Cfg().Get(ctx, "aliyun.oss")
// 		return api.Aliyun.Oss.DownloadContent(ctx, ossConfig.MapStrStr())
// 	}
//
// 	body, err := receiver.Down(resource)
// 	if err != nil {
// 		return "", err
// 	}
//
// 	return string(body), nil
// }

// func (receiver *Download) Download(ctx context.Context, download model.Download) (string, error) {
// 	dir := receiver.GetDownloadPath(ctx)
//
// 	path := filepath.Join(dir, download.Path)
// 	receiver.SetCleanPath(path)
//
// 	err := receiver.DownloadFile(ctx, download.Url, path)
// 	if err != nil {
// 		return "", fmt.Errorf("download failed, err=%s", err.Error())
// 	}
//
// 	return path, nil
// }
// func (receiver *Download) Downloads(ctx context.Context, downloads []model.Download) ([]string, error) {
// 	paths := []string{}
//
// 	dir := receiver.GetDownloadPath(ctx)
//
// 	for _, download := range downloads {
// 		path := filepath.Join(dir, download.Path)
// 		receiver.SetCleanPath(path)
//
// 		paths = append(paths, path)
// 		fmt.Println(path)
//
// 		err := receiver.DownloadFile(ctx, download.Url, path)
// 		if err != nil {
// 			return nil, fmt.Errorf("download failed, err=%s", err.Error())
// 		}
// 	}
//
// 	return paths, nil
// }
